home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / m8087.mqc / M8087.MAC
Text File  |  1984-12-05  |  18KB  |  796 lines

  1. ;**********************************************************;
  2. ;                               ;
  3. ;    M8087.MAC-File of macros which provide assembly    ;
  4. ;    level software support for use of 8087 NDP with    ;
  5. ;    the IBM personal computer.                         ;
  6. ;                               ;
  7. ;**********************************************************;
  8.  
  9.  
  10. if1    ;do not include this file in any output listing
  11.  
  12.  
  13. ;**********************************************************;
  14. ;                               ;
  15. ;    ESC_REG-"REG" parameter specifies ESC value.Issue  ;
  16. ;    proper ESC sequence depending on REG value.PARAM   ;
  17. ;    is a 6-bit parameter whose upper 3-bits make up    ;
  18. ;    the "xxx" bits in the ESC opcode (11011xxx) and    ;
  19. ;    lower 3-bits make up "yyy" bits in source byte     ;
  20. ;    following (using standard "mod" and "r/m"          ;
  21. ;    designators define byte as "modyyyr/m").           ;
  22. ;                               ;
  23. ;**********************************************************;
  24.  
  25. ESC_REG macro PARAM,REG
  26.     ;
  27.     ;We need to determine what "reg" field assignment
  28.     ;corresponds with the current value of REG.This is
  29.     ;used as the source for the ESC operation.PARAM is
  30.     ;used directly in the ESC call
  31.         ;
  32.     ife REG ;dec. until REG=0,then issue ESC sequence
  33.      ESC PARAM,AX    ;AX=000b (see op. summary for 8088)
  34.     else
  35.      REG=REG-1
  36.      ife REG
  37.        ESC PARAM,CX        ;CX=001b
  38.      else
  39.        REG=REG-1
  40.        ife REG
  41.          ESC PARAM,DX    ;DX=010b
  42.        else
  43.          REG=REG-1
  44.          ife REG
  45.            ESC PARAM,BX    ;BX=011b
  46.          else
  47.            REG=REG-1
  48.            ife REG
  49.          ESC PARAM,SP    ;SP=100b
  50.            else
  51.          REG=REG-1
  52.          ife REG
  53.            ESC PARAM,BP    ;BP=101b
  54.          else
  55.            REG=REG-1
  56.            ife REG
  57.              ESC PARAM,SI    ;SI=110b
  58.            else        ;If REG>=7,assume 7
  59.              ESC PARAM,DI    ;DI=111b
  60.            endif
  61.          endif
  62.            endif
  63.          endif
  64.        endif
  65.      endif
  66.        endif
  67. endm    ;Done with ESC_REG macro
  68. ;***********************************************************;
  69. ;                                ;
  70. ;    CHECK_ST-Inputs parameter "ST(i)" and              ;
  71. ;    returns with REG=i                    ;
  72. ;                                ;
  73. ;***********************************************************;
  74.  
  75. CHECK_ST macro P_ST
  76.     REG=-1    ;Assume no match is found
  77.     ifidn <&P_ST>,<ST(0)>    ;Is i=0?
  78.       REG=0
  79.     endif
  80.     ifidn <&P_ST>,<ST(1)>
  81.       REG=1
  82.     endif
  83.     ifidn <&P_ST>,<ST(2)>
  84.       REG=2
  85.     endif
  86.     ifidn <&P_ST>,<ST(3)>
  87.       REG=3
  88.     endif
  89.     ifidn <&P_ST>,<ST(4)>
  90.       REG=4
  91.     endif
  92.     ifidn <&P_ST>,<ST(5)>
  93.       REG=5
  94.     endif
  95.     ifidn <&P_ST>,<ST(6)>
  96.       REG=6
  97.     endif
  98.     ifidn <&P_ST>,<ST(7)>
  99.       REG=7
  100.     endif
  101.     ifidn <&P_ST>,<st(0)>    ;Is i=0?
  102.       REG=0
  103.     endif
  104.     ifidn <&P_ST>,<st(1)>
  105.       REG=1
  106.     endif
  107.     ifidn <&P_ST>,<st(2)>
  108.       REG=2
  109.     endif
  110.     ifidn <&P_ST>,<st(3)>
  111.       REG=3
  112.     endif
  113.     ifidn <&P_ST>,<st(4)>
  114.       REG=4
  115.     endif
  116.     ifidn <&P_ST>,<st(5)>
  117.       REG=5
  118.     endif
  119.     ifidn <&P_ST>,<st(6)>
  120.       REG=6
  121.     endif
  122.     ifidn <&P_ST>,<st(7)>
  123.       REG=7
  124.     endif
  125.         ;
  126.         ;If i not between 0 or 7,see if actually an
  127.         ;"ST(i)" or "ST(I)" string,indicating use of
  128.         ;top of stack element
  129.         ;
  130.     ifidn <&P_ST>,<ST(i)>
  131.       REG=0
  132.     endif
  133.     ifidn <&P_ST>,<ST(I)>
  134.       REG=0
  135.     endif
  136.     ifidn <&P_ST>,<st(i)>
  137.       REG=0
  138.     endif
  139.     ifidn <&P_ST>,<st(I)>
  140.       REG=0
  141.     endif
  142. endm
  143.  
  144.  
  145. ;***********************************************************;
  146. ;                                ;
  147. ;    CHK_CONC-Simple macro that will automatically       ;
  148. ;    insert WAIT statements AFTER every 8087 inst.       ;
  149. ;    which accesses CPU main memory.If variable          ;
  150. ;    "AUTOSYNC"<>0,then these WAITS will be inserted     ;
  151. ;    (providing no concurrency but relieving the         ;
  152. ;    programmer from worrying about synchronizing data   ;
  153. ;    references).If the user program sets AUTOSYNC to    ;
  154. ;    a zero value,then no WAITS are inserted after       ;
  155. ;    the instructions and it is the user's responsibility;
  156. ;    to insure synchronization.                ;
  157. ;                                ;
  158. ;***********************************************************;
  159.  
  160. CHK_CONC macro
  161.     if AUTOSYNC
  162.         WAIT    ;Automatic synchronization
  163.     endif
  164. endm
  165.  
  166.  
  167. ;***********************************************************;
  168. ;                                ;
  169. ;    CHOOSE_4-Determine which of four parameters (xxx1   ;
  170. ;    to xxx4) should be used in ESC sequence,depending   ;
  171. ;    on P1 and P2 values.P1 and P2 are parameters passed ;
  172. ;    by user in macro call.xxx1 to xxx4 are macro-       ;
  173. ;    dependent parameters tacked on to the call to       ;
  174. ;    CHOOSE_4 by the specific 8087 macro called by the   ;
  175. ;    user code.                        ;
  176. ;                                  ;
  177. ;***********************************************************;
  178.  
  179. CHOOSE_4 macro P1,P2,xxx1,xxx2,xxx3,xxx4
  180.     ;Initialize variables
  181.     ZERO=0
  182.     NOTZERO=0
  183.     REG=0
  184.     ;
  185.     ;If user passed no parameters,(P1 and P2 are "blank") then
  186.     ;issue a call to ESC_REG macro to set up proper ESC sequence.
  187.     ;An arithmetic instruction with no operands is identical to 
  188.     ;the same inst. with the operand form "ST(1),ST".
  189.     ;Example:"FDIV"-Divides second element on stack by first and
  190.     ;    places result in second element on stack.
  191.     ;
  192.     ifb <P1>
  193.         REG=1
  194.         ESC_REG xxx1,REG
  195.     else
  196.     ;
  197.     ;Check to see if first parameter (P1) passed by user is "ST".
  198.     ;If yes,indicates that second parameter (P2) is of form "ST(i)"
  199.     ;so use CHECK_ST macro to determine 'i'.Then call ESC_REG macro
  200.     ;to issue ESC sequence.
  201.     ;Example:"FADD ST,ST(4)"-Adds register four (fifth element on
  202.     ;    8087 stack) to top element and leaves result on top
  203.     ;    of stack.
  204.     ;
  205.     ifidn <P1>,<ST>
  206.       CHECK_ST P2
  207.       ZERO=REG+1
  208.       ife ZERO
  209.         REG=1
  210.       endif
  211.       ESC_REG xxx2,REG
  212.     else
  213.     ifidn <P1>,<st>
  214.       CHECK_ST P2
  215.       ZERO=REG+1
  216.       ife ZERO
  217.         REG=1
  218.       endif
  219.       ESC_REG xxx2,REG
  220.     else
  221.       ;
  222.       ;See if P1 is of form "ST(i)".CHECK_ST returns with REG=-1
  223.       ;if not,else REG=i (i from 0-7).If of ST(i) form,assume
  224.       ;P2 is ST (ie. operands are "ST(i),ST").Use ESC_REG for
  225.       ;ESC sequence.
  226.       ;Example:"FSUB ST(3),ST"-Subtract top of stack from reg.
  227.       ;     three (fourth element down the stack) and leave
  228.       ;    result in register 3.
  229.       ;
  230.       CHECK_ST P1
  231.       NOTZERO=REG+1
  232.       if NOTZERO
  233.         ESC_REG xxx1,REG
  234.       else
  235.        ;
  236.        ;See if P1 indicates operation is "SHORT" real type.If so,
  237.        ;then P2 is address of source/dest. and xxx3 sets up
  238.        ;SHORT version of operation requested.
  239.        ;Example:"FMUL SHORT VECTOR[SI]"-Multiply 32 bit number
  240.        ;    found in memory at VECTOR offset from DS:SI address
  241.        ;    by top of 8087 stack and leave result on top of stack
  242.        ;
  243.        ifidn <P1>,<SHORT>
  244.         ESC xxx3,P2
  245.         CHK_CONC    ;Insert non-concurrent WAIT?
  246.        else
  247.        ifidn <P1>,<short>
  248.         ESC xxx3,P2
  249.         CHK_CONC    ;Insert non-concurrent WAIT?
  250.        else
  251.          ;
  252.          ;See if P1 indicates a "LONG" real type.If so,P2 is
  253.          ;source/dest. address and xxx4 is LONG opcode.
  254.          ;Example:"FDIV LONG [BP].ID_NUMB"-Divide top of stack
  255.          ;    by 64 bit number found at SS:BP + ID_NUMB in
  256.          ;    memory.Leave result on top of 8087 stack.
  257.          ;
  258.          ifidn <P1>,<LONG>
  259.         ESC xxx4,P2
  260.         CHK_CONC    ;Insert non-concurrent WAIT?
  261.          else
  262.          ifidn <P1>,<long>
  263.         ESC xxx4,P2
  264.         CHK_CONC    ;Insert non-concurrent WAIT?
  265.          else
  266.          ;
  267.          ;See if P1 indicates "TEMP" real type.If so,P2 is
  268.          ;source/dest. and xxx2 is TEMP opcode.
  269.          ;Example:"FLD TEMP INTERMEDIATE"-Load 80 bit temporary
  270.          ;    real number from memory address INTERMEDIATE onto
  271.          ;    top of 8087 stack.
  272.          ;
  273.          ifidn <P1>,<TEMP>
  274.         ESC xxx2,P2
  275.         CHK_CONC    ;Insert non-concurrent WAIT?
  276.          else
  277.          ifidn <P1>,<temp>
  278.         ESC xxx2,P2
  279.         CHK_CONC    ;Insert non-concurrent WAIT?
  280.          else
  281.         ;
  282.         ;If none of above,assume operation is of type "ST(i)"
  283.         ;and take appropriate action.
  284.         ;Example:"FFREE ST(2)"-Free register 2 in 8087
  285.         ;
  286.         REG=1
  287.         ESC_REG xxx2,REG
  288.          endif
  289.        endif
  290.      endif
  291.        endif
  292.      endif
  293.    endif
  294.  endif
  295.  endif
  296.  endif
  297.  endif
  298. endm
  299.  
  300. ;**************************************************************;
  301. ;                                   ;
  302. ;    INT_SIZE-For all integer operations,determine proper   ;
  303. ;             parameters to use in ESC sequence             ;
  304. ;                                   ;
  305. ;**************************************************************;
  306.  
  307. INT_SIZE macro P1,P2,xxx_S,xxx_W,xxx_L
  308.  
  309.     ;
  310.     ;Do "WORD" integer operation.
  311.     ;Example:"FIMUL WORD PULSE_CNT[SI]"-Multiply 16 bit integer
  312.     ;    value found at (DS:SI + PULSE_CNT) by top of stack
  313.     ;    and leave result on top of stack
  314.     ;
  315.     ifidn <P1>,<WORD>
  316.       ESC xxx_W,P2
  317.     else
  318.     ifidn <P1>,<word>
  319.       ESC xxx_W,P2
  320.     else
  321.     ;
  322.     ;Do "SHORT" integer operation.
  323.     ;Example:"FISUB SHORT [BX].ANGLE"-Subtract 32 bit integer at
  324.     ;    (SP:BX + ANGLE) in main memory from top of stack and
  325.     ;    leave result on top of stack.
  326.     ;
  327.     ifidn <P1>,<SHORT>
  328.       ESC xxx_S,P2
  329.     else
  330.     ifidn <P1>,<short>
  331.       ESC xxx_S,P2
  332.     else
  333.     ;
  334.     ;Do "LONG" integer operation.
  335.     ;Example:"FILD LONG POS_LABEL"-Load 64-bit integer onto top
  336.     ;    of stack from main memory at POS_LABEL.
  337.     ;
  338.     ifidn <P1>,<LONG>
  339.       ESC xxx_L,P2
  340.     else
  341.     ifidn <P1>,<long>
  342.       ESC xxx_L,P2
  343.     else
  344.       ERROR IN macro !!!
  345.     endif
  346.       endif
  347.     endif
  348.   endif
  349.   endif
  350.   endif
  351.   CHK_CONC    ;Insert non-concurrent WAIT?
  352. endm
  353.  
  354. ;***********************************************************;
  355. ;                                ;
  356. ;        DEFINE ALL 8087 MNEMONICS HERE              ;
  357. ;            (In alphabetical order)            ;
  358. ;                                ;
  359. ;***********************************************************;
  360.  
  361.  
  362. FABS    macro        ;Absolute value-No operands
  363.     WAIT        ;Synchronization cmd
  364.     ESC 0CH,CX
  365. endm
  366.  
  367. FADD    macro    P1,P2    ;Add real-//source/dest.,source
  368.             ;    //ST,ST(i)/ST(i),ST/short-real/long-
  369.     ifb <P1>    ;If no parameters,classical stack-discard operands
  370.         FADDP ST(1),ST
  371.     else
  372.         WAIT    ;Synchronization cmd
  373.         CHOOSE_4 P1,P2,20H,00H,00H,20H
  374.     endif
  375. endm
  376.  
  377. FADDP    macro    P1,P2    ;Add real and pop-dest.,source
  378.             ;    ST(i),ST
  379.     WAIT        ;Synchronization cmd
  380.     CHOOSE_4 P1,,30H
  381. endm
  382.  
  383. FBLD    macro    P1    ;Packed decimal (BCD) load-source
  384.             ;     packed-decimal
  385.     WAIT        ;Synch. cmd
  386.     ESC 3CH,P1
  387. endm
  388.  
  389. FBSTP    macro    P1    ;Packed decimal (BCD) store & pop-dest.
  390.             ;    packed-decimal
  391.     WAIT        ;Synch. cmd
  392.     ESC 3EH,P1
  393. endm
  394.  
  395. FCHS    macro        ;Change sign-No operands
  396.     WAIT        ;Synch. cmd
  397.     ESC 0CH,AX
  398. endm
  399.  
  400. FCLEX    macro        ;Clear exceptions-No operands
  401.     WAIT        ;Synch. cmd
  402.     FNCLEX
  403. endm
  404.  
  405. FCOM    macro     P1,P2    ;Compare real-//source
  406.             ;    //ST(i)/short-real/long-real
  407.     WAIT        ;Synch. cmd
  408.     CHOOSE_4 P1,P2,02H,,02H,22H
  409. endm
  410.  
  411. FCOMP    macro    P1,P2    ;Compare real and pop-//source
  412.             ;    //ST(i)/short-real/long-real
  413.     WAIT        ;Synch. cmd
  414.     CHOOSE_4 P1,P2,03H,,03H,23H
  415. endm
  416.  
  417. FCOMPP    macro        ;Compare real and pop twice-No operands
  418.     WAIT        ;Synch. cmd
  419.     ESC 33H,CX
  420. endm
  421.  
  422. FDECSTP    macro        ;Decrement stack pointer-No operands
  423.     WAIT        ;Synch. cmd
  424.     ESC 0EH,SI
  425. endm
  426.  
  427. FDISI    macro        ;Disable interrupts-No operands
  428.     WAIT        ;Synch. cmd
  429.     FNDISI
  430. endm
  431.  
  432. FDIV    macro    P1,P2    ;Divide real-//source/dest.,source
  433.             ;    //ST(i),ST/short-real/long-real
  434.     ifb <P1>    ;If no parameters,classical stack-
  435.             ;    discard operands.
  436.         FDIVP ST(1),ST
  437.     else
  438.         WAIT    ;Synch. cmd
  439.         CHOOSE_4 P1,P2,26H,06H,06H,26H
  440.     endif
  441. endm
  442.  
  443. FDIVP    macro P1,P2    ;Divide real and pop-Dest.,source
  444.             ;    ST(i),ST
  445.     WAIT        ;Synch. cmd
  446.     CHOOSE_4 P1,,36H
  447. endm
  448.  
  449. FDIVR    macro    P1,P2    ;Divide real reversed-//source/dest.,source
  450.             ;  //ST,ST(i)/ST(i),ST/short-real/long-real
  451.     ifb <P1>    ;If no parameters,classical stack-discard ops.
  452.         FDIVRP ST(1),ST
  453.     else
  454.         WAIT    ;Synch. cmd
  455.         CHOOSE_4 P1,P2,27H,07H,07H,27H
  456.     endif
  457. endm
  458.  
  459. FDIVRP    macro P1,P2    ;Divide real reversed and pop-dest.,source
  460.             ;    ST(i),ST
  461.     WAIT        ;Synch. cmd
  462.     CHOOSE_4 P1,,37H
  463. endm
  464.  
  465. FENI    macro        ;Enable interrupts-No operands
  466.     WAIT        ;Synch. cmd
  467.     FNENI
  468. endm
  469.  
  470. FFREE    macro P1    ;Free register-dest.
  471.             ;    ST(i)
  472.     WAIT        ;Synch. cmd
  473.     CHOOSE_4 P1,,28H
  474. endm
  475.  
  476. FIADD    macro    P1,P2    ;Integer add-source
  477.             ;    word-integer/short-integer
  478.     WAIT          ;Synch. cmd
  479.     INT_SIZE P1,P2,10H,30H
  480. endm
  481.  
  482. FICOM    macro    P1,P2    ;Integer compare-source
  483.             ;    word-integer/short-integer
  484.     WAIT        ;Synch. cmd
  485.     INT_SIZE P1,P2,12H,32H
  486. endm
  487.  
  488. FICOMP    macro    P1,P2    ;Integer compare and pop
  489.             ;    word-integer/short-integer
  490.     WAIT        ;Synch. cmd
  491.     INT_SIZE P1,P2,13H,33H
  492. endm
  493.  
  494. FIDIV    macro    P1,P2    ;Integer divide-source
  495.             ;    word-integer/short-integer
  496.     WAIT        ;Synch. cmd
  497.     INT_SIZE P1,P2,16H,36H
  498. endm
  499.  
  500. FIDIVR    macro    P1,P2    ;Integer divide reversed-source
  501.             ;    word-integer/short-integer
  502.     WAIT        ;Synch. cmd
  503.     INT_SIZE P1,P2,17H,37H
  504. endm
  505.  
  506. FILD    macro    P1,P2    ;Integer load-source
  507.             ;  word-integer/short-integer/long-integer
  508.     WAIT        ;Synch. cmd
  509.     INT_SIZE P1,P2,18H,38H,3DH
  510. endm
  511.  
  512. FIMUL     macro    P1,P2    ;Integer multiply-source
  513.             ;    word-integer/short-integer
  514.     WAIT        ;Synch. cmd
  515.     INT_SIZE P1,P2,11H,31H
  516. endm
  517.  
  518. FINCSTP    macro        ;Increment stack pointer-No operands
  519.     WAIT        ;Synch. cmd
  520.     ESC 0EH,DI
  521. endm
  522.  
  523. FINIT    macro        ;Initialize processor-No operands
  524.     WAIT        ;Synch. cmd
  525.     FNINIT
  526. endm
  527.  
  528. FIST    macro    P1,P2    ;Integer store-dest.
  529.             ;    word-integer/short-integer
  530.     WAIT        ;Synch. cmd
  531.     INT_SIZE P1,P2,1AH,3AH
  532. endm
  533.  
  534. FISTP    macro    P1,P2    ;Integer store and pop-dest.
  535.             ;  word-integer/short-integer/long-integer
  536.     WAIT        ;Synch. cmd
  537.     INT_SIZE P1,P2,1BH,3BH,3FH
  538. endm
  539.  
  540. FISUB    macro    P1,P2    ;Integer subtract-source
  541.             ;    word-integer/short-integer
  542.     WAIT        ;Synch. cmd
  543.     INT_SIZE P1,P2,14H,34H
  544. endm
  545.  
  546. FISUBR     macro    P1,P2    ;Integer subtract reversed-source
  547.             ;    word-integer/short-integer
  548.     WAIT        ;Synch. cmd
  549.     INT_SIZE P1,P2,15H,35H
  550. endm
  551.  
  552. FLD    macro    P1,P2    ;Load real-source
  553.             ;  ST(i)/short-real/long-real/temp-real
  554.     WAIT        ;Synch. cmd
  555.     CHOOSE_4 P1,P2,08H,1DH,08H,28H ;1DH INDICATES TEMP. REAL!
  556. endm
  557.  
  558. FLDCW    macro    P1    ;Load control word-source
  559.             ;    2-bytes
  560.     WAIT        ;Synch. cmd
  561.     ESC 0DH,P1
  562. endm
  563.  
  564. FLDENV    macro    P1    ;Load environment-source
  565.             ;    14-bytes
  566.     WAIT        ;Synch. cmd
  567.     ESC 0CH,P1    
  568. endm
  569.  
  570. FLDLG2    macro        ;Load log 2 (base 10)-No operands
  571.     WAIT        ;Synch. cmd
  572.     ESC 0DH,SP
  573. endm
  574.  
  575. FLDLN2    macro        ;Load log 2 (base e)-No operands
  576.     WAIT         ;Synch. cmd
  577.     ESC 0DH,BP    ;
  578. endm
  579.  
  580. FLDL2E    macro        ;Load log e (base 2)-No operands
  581.     WAIT        ;Synch. cmd
  582.     ESC 0DH,DX
  583. endm
  584.  
  585. FLDL2T    macro        ;Load log 10 (base 2)-No operands
  586.     WAIT        ;Synch. cmd
  587.     ESC 0DH,CX
  588. endm
  589.  
  590. FLDPI    macro        ;Load pi-No operands
  591.     WAIT         ;Synch. cmd
  592.     ESC 0DH,BX
  593. endm
  594.  
  595. FLDZ    macro        ;Load +0.0-No operands
  596.     WAIT        ;Synch. cmd
  597.     ESC 0DH,SI
  598. endm
  599.  
  600. FLD1    macro        ;Load +1.0-No operands
  601.     WAIT        ;Synch. cmd
  602.     ESC 0DH,AX
  603. endm
  604.  
  605. FMUL    macro    P1,P2    ;Multiply real-//source/dest.,source
  606.             ;  //ST(i),ST/ST,ST(i)/short-real/long-real
  607.     ifb <P1>    ;If no parameters,classical stack-discard ops.
  608.         FMULP ST(1),ST
  609.     else
  610.         WAIT    ;Synch.cmd
  611.         CHOOSE_4 P1,P2,21H,01H,01H,21H
  612.     endif
  613. endm
  614.  
  615. FMULP    macro    P1,P2    ;Multiply real and pop-dest.,source
  616.             ;    ST(i),ST
  617.     WAIT        ;Synch. cmd
  618.     CHOOSE_4 P1,,31H
  619. endm
  620.  
  621. FNCLEX    macro        ;Clear exceptions-No wait FCLEX
  622.     ESC 1CH,DX
  623. endm
  624.  
  625. FNDISI    macro        ;Disable interrupts-No wait FDISI
  626.     ESC 1CH,CX
  627. endm
  628.  
  629. FNENI    macro        ;Enable interrupts-No wait FENI
  630.     ESC 1CH,AX
  631. endm
  632.  
  633. FNINIT    macro        ;Initialize processor-No wait FINIT
  634.     ESC 1CH,BX
  635. endm
  636.  
  637. FNOP    macro        ;No operation-No operands
  638.     WAIT        ;Synch. cmd
  639.     ESC 0AH,AX
  640. endm
  641.  
  642. FNSAVE    macro    P1    ;Save state-dest. (No wait FSAVE)
  643.             ;    94-bytes
  644.     ESC 2EH,P1
  645. endm
  646.  
  647. FNSTCW    macro    P1    ;Store control word-dest. (No wait FSTCW)
  648.             ;    2-bytes
  649.     ESC 0FH,P1
  650. endm
  651.  
  652. FNSTENV    macro    P1    ;Store environment-dest. (No wait FSTENV)
  653.             ;    14-bytes
  654.     ESC 0EH,P1
  655. endm
  656.  
  657. FNSTSW    macro    P1    ;Store status word-dest. (No wait FSTSW)
  658.             ;    2-bytes
  659.     ESC 2FH,P1
  660. endm
  661.  
  662. FPATAN    macro        ;Partial arctangent-No operands
  663.     WAIT        ;Synch. cmd
  664.     ESC 0EH,BX
  665. endm
  666.  
  667. FPREM    macro        ;Partial remainder-No operands
  668.     WAIT        ;Synch. cmd
  669.     ESC 0FH,AX
  670. endm
  671.  
  672. FPTAN    macro        ;Partial tangent-No operands
  673.     WAIT         ;Synch. cmd
  674.     ESC 0EH,DX
  675. endm
  676.  
  677. FRNDINT    macro        ;Round to integer-No operands
  678.     WAIT        ;Synch. cmd
  679.     ESC 0FH,SP
  680. endm
  681.  
  682. FRSTOR    macro    P1    ;Restore saved state-source
  683.             ;    94-bytes
  684.     WAIT        ;Synch. cmd
  685.     ESC 2CH,P1
  686. endm
  687.  
  688. FSAVE    macro    P1    ;Save state-dest.
  689.             ;    94-bytes
  690.     WAIT        ;Synch. cmd
  691.     FNSAVE P1
  692. endm
  693.  
  694. FSCALE    macro        ;Scale-No operands
  695.     WAIT        ;Synch. cmd
  696.     ESC 0FH,BP
  697. endm
  698.  
  699. FSQRT    macro        ;Square root-No operands
  700.     WAIT        ;Synch. cmd
  701.     ESC 0FH,DX
  702. endm
  703.  
  704. FST    macro    P1,P2    ;Store real-dest.
  705.             ;  ST(i)/short-real/long-real
  706.     WAIT        ;Synch. cmd
  707.     CHOOSE_4 P1,P2,2AH,,0AH,2AH
  708. endm
  709.  
  710. FSTCW    macro    P1    ;Store control word-dest.
  711.             ;    2-bytes
  712.     WAIT        ;Synch. cmd
  713.     FNSTCW     P1
  714. endm
  715.  
  716. FSTENV    macro    P1    ;Store environment-dest.
  717.             ;    14-bytes
  718.     WAIT        ;Synch. cmd
  719.     FNSTENV P1
  720. endm
  721.  
  722. FSTP    macro    P1,P2    ;Store real and pop-dest.
  723.             ;  ST(i)/short-real/long-real/temp.-real
  724.     WAIT        ;Synch. cmd
  725.     CHOOSE_4 P1,P2,2BH,1FH,0BH,2BH    ;1FH INDICATES TEMP. REAL!
  726. endm
  727.  
  728. FSTSW    macro    P1    ;Store status word-dest.
  729.             ;    2-bytes
  730.     WAIT        ;Synch. cmd
  731.     FNSTSW P1
  732. endm
  733.  
  734. FSUB    macro    P1,P2    ;Subtract real-//source/dest.,source
  735.             ;  //ST,ST(i)/ST(i),ST/short-real/long-real
  736.     ifb <P1>    ;If no parameters,classical stack-discard ops.
  737.         FSUBP ST(1),ST
  738.     else
  739.         WAIT    ;Synch. cmd
  740.         CHOOSE_4 P1,P2,24H,04H,04H,24H
  741.     endif
  742. endm
  743.  
  744. FSUBP    macro    P1,P2    ;Subtract real and pop-dest.,source
  745.             ;    ST(i),ST
  746.     WAIT        ;Synch. cmd
  747.     CHOOSE_4 P1,,34H
  748. endm
  749.  
  750. FSUBR    macro    P1,P2    ;Subtract real reversed-//source/dest.,source
  751.             ;  //ST,ST(i)/ST(i),ST/short-real/long-real
  752.     ifb <P1>    ;If no parameters,classical stack-discard ops.
  753.         FSUBRP ST(1),ST
  754.     else
  755.         WAIT    ;Synch. cmd
  756.         CHOOSE_4 P1,P2,25H,05H,05H,25H
  757.     endif
  758. endm
  759.  
  760. FSUBRP    macro    P1,P2    ;Subtract real reversed and pop-dest.,source
  761.             ;    ST(i),ST
  762.     WAIT        ;Synch. cmd
  763.     CHOOSE_4 P1,,35H
  764. endm
  765.  
  766. FTST    macro        ;Test stack top against +0.0-No operands
  767.     WAIT        ;Synch. cmd
  768.     ESC 0CH,SP
  769. endm
  770.  
  771. FWAIT    macro        ;(CPU) Wait while 8087 is busy-No operands
  772.     WAIT        ;NOTE:CPU instruction, not escape code
  773. endm
  774.  
  775. FXAM    macro        ;Examine stack top-No operands
  776.     WAIT        ;Synch. cmd
  777.     ESC 0CH,BP
  778. endm
  779.  
  780. FXCH    macro    P1    ;Exchange registers-//dest.
  781.             ;    //ST(i)
  782.     WAIT        ;Synch. cmd
  783.     CHOOSE_4 P1,,09H
  784. endm
  785.  
  786. FXTRACT    macro        ;Extract exponent and significand-No operands
  787.     WAIT        ;Synch. cmd
  788.     ESC 0EH,SP
  789. endm
  790.  
  791. FYL2X    macrALKER  .BQS   8704   A 06/09/84 22:57
  792. MSPOOL  .DQC   3139   A 06/16/84 23:10   PCT365  .TXT   3328   A 06/08/84 08:31
  793. DELETE  .DOC    768   A 12/03/83 17:21   SUBS    .BAS   8832   A 06/13/84 21:54
  794. MONITOR .BAS   7249   A 04/24/84 22:17   FLIP20  .COM    128   A 06/16/84 18:57
  795. ADVCOMP .DQC  19542   A 06/16/84 22:56   FLIP10  .COM    128   A 06/16/84 18:59
  796. BABY    .EXE  37888